package com.class05.pojo;

import jakarta.validation.constraints.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.Range;

import java.util.Date;

@Data
@ToString
@NoArgsConstructor
@AllArgsConstructor
public class Person {


//    @NotNull 、@NotEmpty、@NotBlank 区别：
//    @NotNull 用于基本类型和对象，不能为null
//    @NotEmpty 用于集合，数组和字符串，不能为null且长度大于0
//    @NotBlank 用于字符串，不能为null且长度大于0且不含空白字符



    @NotNull(message = "姓名不能为空")
    @NotEmpty(message = "姓名不能为空字符串")
    private String name; // 姓名不可为null且不能为空字符串

    @AssertTrue(message = "必须同意服务条款")
    private boolean termsOfService; // 必须同意服务条款，值为true

    @Min(value = 0, message = "年龄必须大于或等于0")
    @Range(min = 0, max = 150, message = "年龄必须在0到150之间")
    private int age; // 年龄必须在0到150之间

    @DecimalMin(value = "18.5", message = "体重必须大于或等于18.5")
//    @Range(min = 18.5L, max = 300.0L, message = "体重必须在18.5到300.0之间")
    private double weight; // 体重必须在18.5到300.0之间

    @Size(max = 20, min = 5, message = "邮箱长度必须在5到20之间")
    @Email(message = "邮箱格式不正确")
    private String email; // 邮箱长度必须在5到20之间且格式正确

    @Length(min = 10, max = 15, message = "电话号码长度必须在10到15之间")
    private String phoneNumber; // 电话号码长度必须在10到15之间

    @Past(message = "出生日期必须是过去的日期")
    private Date birthDate; // 出生日期必须是过去的日期

    @Future(message = "毕业日期必须是将来的日期")
    private Date graduationDate; // 毕业日期必须是将来的日期

    @Pattern(regexp = "^(男|女)$", message = "性别只能包含字母")
    private String gender; // 性别只能是男或女

}
